/*
 * FileThread.java
 *
 * Created on 26 de septiembre de 2007, 10:31 AM
 *
 * To change this template, choose Tools | Options and locate the template under
 * the Source Creation and Management node. Right-click the template and choose
 * Open. You can then make changes to the template in the Source Editor.
 */

package com.src.computec.radar.despachos.thread;

import com.src.computec.radar.despachos.base.constantes.ConstantesGenerales;
import com.src.computec.radar.services.utilities.dto.EnvioDto;
import com.src.log4j.logger.custom.XLogger;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Date;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;

/**
 *
 * @author aocampo
 */
public class FileThread implements Runnable {
    
    private static XLogger xLogger;
    public static final int FILE_INCONSISTENCIAS = 1;
    public static final int FILE_VALIDACIONES = 2;
    public static final int FILE_ENVIOS_ORDEN_PROCESO_POR_DESPACHAR = 3;
    public static final int FILE_LOAD_GESTION_DISTRIBUCION = 4;
    private int i;
    private String fileName;
    private Hashtable inconsistenciasHashTable;
    private Hashtable validacionesHashTable;
    private List listEnvios;
    
    /** Creates a new instance of FileThread */
    public FileThread(int i, String fileName, Hashtable inconsistenciasHashTable, Hashtable validacionesHashTable) {
        this.xLogger = (XLogger) XLogger.getLogger(this.getClass().getName());
        this.i = i;
        this.fileName = fileName;
        this.inconsistenciasHashTable = inconsistenciasHashTable;
        this.validacionesHashTable = validacionesHashTable;
    }   
    
    public FileThread(int i, String fileName, List listEnvios) {
        this.i = i;
        this.fileName = fileName;
        this.listEnvios = listEnvios;
    }   
    
    public void run() {
        switch (i) {
            case FILE_INCONSISTENCIAS: {
                this.createNewFileInconsistencias();
                break;
            }
            case FILE_VALIDACIONES: {
                this.createNewFileValidaciones();
                break;
            }
            case FILE_ENVIOS_ORDEN_PROCESO_POR_DESPACHAR: {
                this.createNewFileEnviosOrdenProcesoPorDespachar();
                break;
            }
            case FILE_LOAD_GESTION_DISTRIBUCION: {
                this.createNewFileLoadGestionDistribucion();
                break;
            }
        }
    }
    
    private void createNewFileInconsistencias() {
        if (inconsistenciasHashTable != null && !inconsistenciasHashTable.isEmpty()) {
            File file = null;
            FileWriter fileWriter = null;
            try {
                file = new File(ConstantesGenerales.FOLDER_CARGUE_ARCHIVOS + ConstantesGenerales.FOLDER_DESPACHOS_INCONSISTENCIAS + fileName);
                fileWriter = new FileWriter(file);
                fileWriter.write("CODIGO_BARRAS" + ConstantesGenerales.FILE_SEPARATOR);
                fileWriter.write("INCONSISTENCIA" + ConstantesGenerales.CAR_RETURN + ConstantesGenerales.LINE_JUMP);
                Iterator iterator = inconsistenciasHashTable.keySet().iterator();
                while (iterator.hasNext()) {
                    String inconsistencia = (String) iterator.next();
                    fileWriter.write(inconsistencia + ConstantesGenerales.FILE_SEPARATOR);
                    fileWriter.write((String) ConstantesGenerales.HASH_TABLE_INCONSISTENCIAS.get((String) inconsistenciasHashTable.get(inconsistencia)) + ConstantesGenerales.CAR_RETURN + ConstantesGenerales.LINE_JUMP);
                }
                fileWriter.write(ConstantesGenerales.CAR_RETURN + ConstantesGenerales.LINE_JUMP + "NRO. REGISTROS: " + inconsistenciasHashTable.size() + ConstantesGenerales.CAR_RETURN + ConstantesGenerales.LINE_JUMP);
                fileWriter.write("FECHA GENERACION: " + ConstantesGenerales.SIMPLE_DATE_FORMAT.format(new Date()));
                inconsistenciasHashTable = null;
            }
            catch (IOException e) {
                xLogger.error("FileThread:createNewFileInconsistencias:", e);
            }
            catch (Exception e) {
                xLogger.error("FileThread:createNewFileInconsistencias:", e);
            }
            finally {
                try {
                    if (fileWriter != null) {
                        fileWriter.close();
                    }
                }
                catch (IOException e) {
                    xLogger.error("FileThread:createNewFileInconsistencias:fileWriterClose:", e);
                }
            }
        }
    }
    
    private void createNewFileValidaciones() {
        if (validacionesHashTable != null && !validacionesHashTable.isEmpty()) {
            File file = null;
            FileWriter fileWriter = null;
            try {
                file = new File(ConstantesGenerales.FOLDER_CARGUE_ARCHIVOS + ConstantesGenerales.FOLDER_DESPACHOS_VALIDACIONES + fileName);
                fileWriter = new FileWriter(file);
                fileWriter.write("CODIGO_BARRAS" + ConstantesGenerales.FILE_SEPARATOR);
                fileWriter.write("VALIDACION" + ConstantesGenerales.CAR_RETURN + ConstantesGenerales.LINE_JUMP);
                Iterator iterator = validacionesHashTable.keySet().iterator();
                while (iterator.hasNext()) {
                    String validacion = (String) iterator.next();
                    fileWriter.write(validacion + ConstantesGenerales.FILE_SEPARATOR);
                    fileWriter.write((String) ConstantesGenerales.HASH_TABLE_VALIDACIONES.get((String) validacionesHashTable.get(validacion)) + ConstantesGenerales.CAR_RETURN + ConstantesGenerales.LINE_JUMP);
                }
                fileWriter.write(ConstantesGenerales.CAR_RETURN + ConstantesGenerales.LINE_JUMP + "NRO. REGISTROS: " + validacionesHashTable.size() + ConstantesGenerales.CAR_RETURN + ConstantesGenerales.LINE_JUMP);
                fileWriter.write("FECHA GENERACION: " + ConstantesGenerales.SIMPLE_DATE_FORMAT.format(new Date()));
                validacionesHashTable = null;
            }
            catch (IOException e) {
                xLogger.error("FileThread:createNewFileValidaciones:", e);
            }
            catch (Exception e) {
                xLogger.error("FileThread:createNewFileValidaciones:", e);
            }
            finally {
                try {
                    if (fileWriter != null) {
                        fileWriter.close();
                    }
                }
                catch (IOException e) {
                    xLogger.error("FileThread:createNewFileValidaciones:fileWriterClose:", e);
                }
            }
        }
    }
    
    private void createNewFileEnviosOrdenProcesoPorDespachar() {
        if (listEnvios != null && !listEnvios.isEmpty()) {
            File file = null;
            FileWriter fileWriter = null;
            try {
                file = new File(ConstantesGenerales.FOLDER_CARGUE_ARCHIVOS + ConstantesGenerales.FOLDER_DESPACHOS_ORDENES_PROCESO_POR_DESPACHAR + fileName);
                fileWriter = new FileWriter(file);
                fileWriter.write("CONSECUTIVO" + ConstantesGenerales.FILE_SEPARATOR);
                fileWriter.write("CODIGO_BARRAS" + ConstantesGenerales.FILE_SEPARATOR);
                fileWriter.write("DIRECCION_DESTINATARIO" + ConstantesGenerales.FILE_SEPARATOR);
                fileWriter.write("DESTINO" + ConstantesGenerales.FILE_SEPARATOR);
                fileWriter.write("RAZON_SOCIAL_PROVEEDOR - NOMBRE_NODO" + ConstantesGenerales.FILE_SEPARATOR);
                fileWriter.write("NUMERO_ORDEN" + ConstantesGenerales.FILE_SEPARATOR);
                fileWriter.write("NOMBRE_TIPO_ENVIO" + ConstantesGenerales.CAR_RETURN + ConstantesGenerales.LINE_JUMP);
                Iterator iterator = listEnvios.iterator();
                while (iterator.hasNext()) {
                    EnvioDto envioDto = (EnvioDto) iterator.next();
                    fileWriter.write(envioDto.getConsecutivo() + ConstantesGenerales.FILE_SEPARATOR);
                    fileWriter.write(envioDto.getCodigoBarras() + ConstantesGenerales.FILE_SEPARATOR);
                    fileWriter.write(envioDto.getDireccionDestinatario() + ConstantesGenerales.FILE_SEPARATOR);
                    fileWriter.write(envioDto.getNombreDepartamento() + " / " + envioDto.getNombreCentroPoblado() + ConstantesGenerales.FILE_SEPARATOR);
                    fileWriter.write(envioDto.getRazonSocialProveedor() + " - " + envioDto.getNombreNodo() + ConstantesGenerales.FILE_SEPARATOR);
                    fileWriter.write(envioDto.getNumeroOrden() + ConstantesGenerales.FILE_SEPARATOR);
                    fileWriter.write(envioDto.getNombreTipoEnvio() + ConstantesGenerales.CAR_RETURN + ConstantesGenerales.LINE_JUMP);
                }
                fileWriter.write(ConstantesGenerales.CAR_RETURN + ConstantesGenerales.LINE_JUMP + "NRO. REGISTROS: " + listEnvios.size() + ConstantesGenerales.CAR_RETURN + ConstantesGenerales.LINE_JUMP);
                fileWriter.write("FECHA GENERACION: " + ConstantesGenerales.SIMPLE_DATE_FORMAT.format(new Date()));
                listEnvios = null;
            }
            catch (IOException e) {
                xLogger.error("FileThread:createNewFileEnviosOrdenProcesoPorDespachar:", e);
            }
            catch (Exception e) {
                xLogger.error("FileThread:createNewFileEnviosOrdenProcesoPorDespachar:", e);
            }
            finally {
                try {
                    if (fileWriter != null) {
                        fileWriter.close();
                    }
                }
                catch (IOException e) {
                    xLogger.error("FileThread:createNewFileEnviosOrdenProcesoPorDespachar:fileWriterClose:", e);
                }
            }
        }
    }
    
    private void createNewFileLoadGestionDistribucion() {
        if (listEnvios != null && !listEnvios.isEmpty()) {
            File file = null;
            FileWriter fileWriter = null;
            Date today = new Date();
            try {
                file = new File(ConstantesGenerales.FOLDER_CARGUE_ARCHIVOS + ConstantesGenerales.FOLDER_CARGUE_GESTION + fileName);
                fileWriter = new FileWriter(file);
                Iterator iterator = listEnvios.iterator();
                while (iterator.hasNext()) {
                    EnvioDto envioDto = (EnvioDto) iterator.next();
                    fileWriter.write(envioDto.getCodigoBarras() + ConstantesGenerales.FILE_SEPARATOR_TO_HELP);
                    fileWriter.write(ConstantesGenerales.CODIGO_GESTION_ENVIO_DISTRIBUCION + ConstantesGenerales.FILE_SEPARATOR_TO_HELP);
                    fileWriter.write(ConstantesGenerales.SHORT_SIMPLE_DATE_FORMAT_TO_HELP_AUX.format(today) + ConstantesGenerales.CAR_RETURN + ConstantesGenerales.LINE_JUMP);
                }
                listEnvios = null;
            }
            catch (IOException e) {
                xLogger.error("FileThread:createNewFileEnviosOrdenProcesoPorDespachar:", e);
            }
            catch (Exception e) {
                xLogger.error("FileThread:createNewFileEnviosOrdenProcesoPorDespachar:", e);
            }
            finally {
                try {
                    if (fileWriter != null) {
                        fileWriter.close();
                    }
                }
                catch (IOException e) {
                    xLogger.error("FileThread:createNewFileEnviosOrdenProcesoPorDespachar:fileWriterClose:", e);
                }
            }
        }
    }
}